Saltar al contenido principal

Instala y crea tu DID


Pre requisitos:

Debes tener instalado:

  • NODEJS
  • NPM
  • TYPESCRIPT
  • TS-NODE

1. Crea un directorio

mkdir quarkid-app
cd quarkid-app

2. Instala

Usa NPM para instalar los sigueintes paquetes:

npm init
npm install @extrimian/did-registry @extrimian/did-core @extrimian/kms-client @extrimian/kms-core

3. Crea las claves

Para crear un DID necesitas proveer tus claves publicas. Puedes usar el componente Extrimian KMS para generar tus claves publicas y privadas.

Key Management Service

KMS aplica conceptos de inversión de dependencias por lo que requiere enviar un SecureStorage en su constructor. En esta oportunbidad usaremos FileSystem para guardar los datos y podes acceder a ellos de una manera sensilla. Crea un archivo storage.ts con el siguiente codigo:

import { readFileSync, writeFileSync, existsSync } from "fs";
import { KMSStorage } from "@extrimian/kms-core";

export class FileSystemKMSSecureStorage implements KMSStorage {
public readonly filepath: string;

constructor(params: { filepath: string }) {
this.filepath = params.filepath;
}

async add(key: string, data: any): Promise<void> {
const map = this.getData();
map.set(key, data);
this.saveData(map);
}

async get(key: string): Promise<any> {
return this.getData().get(key);
}

async getAll(): Promise<Map<string, any>> {
return this.getData();
}

update(key: string, data: any) {
const map = this.getData();
map.set(key, data);
this.saveData(map);
}

remove(key: string) {
const map = this.getData();
map.delete(key);
this.saveData(map);
}

private getData(): Map<string, any> {
if (!existsSync(this.filepath)) {
return new Map();
}

const file = readFileSync(this.filepath, {
encoding: "utf-8",
});

if (!file) {
return new Map();
}

return new Map(Object.entries(JSON.parse(file)));
}

private saveData(data: Map<string, any>) {
writeFileSync(this.filepath, JSON.stringify(Object.fromEntries(data)), {
encoding: "utf-8",
});
}
}
  • KMS Keys

    Crea un archivo did.ts.

Importa la siguientes dependecias.

import { FileSystemKMSSecureStorage } from "./storage";
import { KMSClient } from "@extrimian/kms-client";
import { LANG, Suite } from "@extrimian/kms-core";

Crea una funcion que se llame createDID como se muestra a continuación.

Crea las claves recoveryKey, updateKey, bbsBlsJwk y didCommJwk.

export const createDID = async () => {
const kms = new KMSClient({
lang: LANG.en,
storage: new FileSystemKMSSecureStorage({
filepath: "file-system-storage",
}),
});

const updateKey = await kms.create(Suite.ES256k);
const recoveryKey = await kms.create(Suite.ES256k);

const didComm = await kms.create(Suite.DIDComm);
const bbsbls = await kms.create(Suite.Bbsbls2020);
};

Para obtener más información sobre Extrimian KMS, lea la documentación en: @extrimian/kms-client

4. Crea un long DID

Con el servicio de creacion de un did podes crear un LONG DID, este es un DID en el que su DID Document se encuentra embebido en la información que devuelve en un formato base64. Es un DID autoresoluble, es decir, desencondeando el base64 podes obtener su DID Document.

En el archivo did.ts importa las dependecias y agrega el código que se muestra a continuación.

import { Did } from "@extrimian/did-registry";
import {
AssertionMethodPurpose,
KeyAgreementPurpose,
} from "@extrimian/did-core";
const didService = new Did();

const createDidResponse = await didService.createDID({
updateKeys: [updateKey.publicKeyJWK],
recoveryKeys: [recoveryKey.publicKeyJWK],
verificationMethods: [
{
id: "bbsbls",
type: "Bls12381G1Key2020",
publicKeyJwk: bbsbls.publicKeyJWK,
purpose: [new AssertionMethodPurpose()],
},
{
id: "didComm",
type: "X25519KeyAgreementKey2019",
publicKeyJwk: didComm.publicKeyJWK,
purpose: [new KeyAgreementPurpose()],
},
],
});

return createDidResponse;

5. Prueba tu DID

Escribe el siguiente codigo para probar si tu did se creó correctamente.

console.log(JSON.stringify(createDidResponse.longDid));

Y ejecuta la función.

createDID();

Abre una terminal y usa ts-node para ejecutar tu código.

ts-node did.ts